#include "liste_terrain.h"
#include <iostream>
using namespace std;

liste_terrain* creerListeTerrain(FILE* f,int nbrTer,liste_terrain* precedent)	///cree une liste de terrain d'un niveau
{
               liste_terrain* lter;
               int num;
               lter=new(liste_terrain);	///alloue la place pour une liste de terrain
               fscanf(f,"%d\n",&num);	///on recup le numero du terrain
               listeTerrainSetNumTer(lter,num);	/// on initialise le numero du terrain
               listeTerrainSetTerrain(lter,creerTerrain(f));	///on init le terrain
               listeTerrainSetPrecedant(lter,precedent);	///on init le terrain precedent
               if(nbrTer>1)	///si il y a plus d'un terrain dans ce niveau
               {
                           nbrTer--;
                           listeTerrainSetSuivant(lter,creerListeTerrain(f,nbrTer,lter));	///on init le terrain suivant
               }
               else
               {
                    listeTerrainSetSuivant(lter,NULL);	///une façon d'indiquer qu'il n'y a pas d'autre terrain dans ce niveau
               }
               return lter;
}

void supprimeListeTerrain(liste_terrain* lter)	///suppr une liste de terrain
{
     if(listeTerrainGetSuivant(lter) != NULL)
     {
                      supprimeListeTerrain(listeTerrainGetSuivant(lter));
     }
     supprimeTerrain(listeTerrainGetTerrain(lter));
     delete(lter);///libere la place
}

void afficheListeTerrain(liste_terrain* lter)	///affiche une liste de terrain
{
     cout<<listeTerrainGetNumTer(lter)<<endl;
     afficheTerrain(listeTerrainGetTerrain(lter));
     if(listeTerrainGetSuivant(lter) != NULL)
     {
                      afficheListeTerrain(listeTerrainGetSuivant(lter));
     }
}

Terrain* listeTerrainGetTerrain(const liste_terrain* lter)	///recup le terrain
{
         return lter->ter;
}

int listeTerrainGetNumTer(const liste_terrain* lter)	///recup le numero du terrain
{
    return lter->numTer;
}

liste_terrain* listeTerrainGetSuivant(const liste_terrain* lter)	///recup le terrain suivant
{
               return lter->suivant;
}

liste_terrain* listeTerrainGetPrecedant(const liste_terrain* lter)	///recup le terrain precedent
{
               return lter->precedant;
}

void listeTerrainSetTerrain(liste_terrain* lter, Terrain* ter)	///change le terrain
{
     lter->ter = ter;
}

void listeTerrainSetNumTer(liste_terrain* lter, int nbr)	///change le numero du terrain
{
     lter->numTer=nbr;
}

void listeTerrainSetSuivant(liste_terrain* lter, liste_terrain* suivant)	///change le terrain suivant (en gros le 2e terrain suivant devient le terrain suivant direct puisque qu'avant on a probablement changé de terrain)
{
     lter->suivant=suivant;
}

void listeTerrainSetPrecedant(liste_terrain* lter, liste_terrain* precedant)	///change le terrain precedent (en gros l'ancien actuel devient le precedent, puisque qu'avant on a problement changé de terrain)
{
     lter->precedant=precedant;
}

Terrain* lterChercheTerrain(liste_terrain* lter,int numTer)	///cherche un terrain par rapport à son numéro
{
         if(listeTerrainGetNumTer(lter)==numTer)
         {
                                                return listeTerrainGetTerrain(lter);
         }
         else
         {
             if(listeTerrainGetSuivant(lter)!=NULL)
             {
                return lterChercheTerrain(listeTerrainGetSuivant(lter),numTer);
             }
             else
             {
                 cout<<"ce terrain n'existe pas"<<endl;
                 return NULL;
             }
         }
}
